package com.ttbj.api.driver;

import java.util.List;

import com.mysql.jdbc.Driver;
import com.ttbj.api.dto.Page;
import com.ttbj.api.dto.driver.DriverDto;
import com.ttbj.api.exception.BusinessException;


public interface DriverService {
	
	/**
	 * 通过司机id查询长途司机部分信息，用于预订单中显示
	 * @param driverId 司机id
	 * @return
	 * @throws BusinessException
	 */
	public DriverDto findDriverInfoById(Long driverId) throws BusinessException;
	
	/**
	 * 分页查询公司下所有的长途司机信息
	 * @param page 分页
	 * @param driverDto 长途司机信息
	 * @param companyNum 公司编号
	 * @return 司机 list
	 * @throws BusinessException
	 */
	public List<DriverDto> findDriverInfoByPage(Page page, DriverDto driverDto, String companyNum) throws BusinessException;
	
	/**
	 * 分页查询公司下所有的长途司机信息数量
	 * @param driverDto 长途司机信息
	 * @param companyNum 公司编号
	 * @return 数量 int
	 * @throws BusinessException
	 */
	public Integer findDriverInfoByPageCount(DriverDto driverDto, String companyNum) throws BusinessException;
	
	/**
	 * 增加司机信息，并增加 长途司机-公司关系
	 * @param driverDto 长途司机信息
	 * @return
	 * @throws BusinessException
	 */
	public void addDriverAndDriverComnumInfo(DriverDto driverDto, String companyNum) throws BusinessException;
	
	/**
	 * 只增加 长途司机-公司关系
	 * @param driverNum 司机编号
	 * @param companyNum 公司编号
	 * @throws BusinessException
	 */
	public void addDriverComnumInfo(String driverNum, String companyNum) throws BusinessException;
	
	/**
	 * 通过司机用户名查询在已通过审核的信息中是否存在
	 * 审核中和通过审核的司机这个用户名不能重复
	 * @param driverName 司机用户名
	 * @return
	 * @throws BusinessException
	 */
	public Integer findDriverInfoExist(String driverName) throws BusinessException;
	
	/**
	 * 通过长途司机用户名 查询司机编号
	 * @param driverName 长途司机用户名
	 * @return
	 * @throws BusinessException
	 */
	public String findDriverNumByName(String driverName) throws BusinessException;
	
	/**
	 * 删除 长途司机-公司 关系
	 * @param driverNum 长途司机编号
	 * @param comnumNum 公司编号
	 * @throws BusinessException
	 */
	public void delDriverAndComnum(String driverNum, String comnumNum) throws BusinessException;
	
	/**
	 * 通过司机的id查询需要审核的信息（也是点击详情里的信息）
	 * @param driverId
	 * @return
	 * @throws BusinessException
	 */
	public DriverDto findDriverDetailsById(Long driverId) throws BusinessException;
	
	/**
	 * 通过短运司机id更新审核状态
	 * @param toExamine 审核状态
	 * @param driverId 司机id
	 * @return
	 * @throws BusinessException
	 */
	public void modifyDriverToExamine(int toExamine, Long driverId) throws BusinessException;
	
	/**
	 * 更改短运司机是否被禁用
	 * @param isDelete 是否被删除：0未禁用，1已禁用
	 * @param driverNum 短运司机编号
	 * @return
	 */
	public void modifyDriverDisable(Integer isDelete, String driverNum) throws BusinessException;
	
	/**
	 * 易通金服：短运司机开户
	 * @param driverNum 司机编号
	 * @param accBank 开户银行
	 * @param cardNo 银行卡号
	 * @param cardName 持卡人姓名
	 * @param driverIdCard 身份证号
	 * @param mobileNo 手机号
	 * @throws BusinessException
	 */
	public String shortDriverOpenAcc(String driverNum, String accBank, String cardNo, String cardName, String driverIdCard, String mobileNo) throws BusinessException;
	
	/**
	 * 易通金服：短运司机账户变更
	 * @param driverNum 司机编号
	 * @param accountNo 账户号
	 * @param accBank 开户银行
	 * @param cardNo 银行卡号 
	 * @param mobileNo 手机号
	 * @throws BusinessException
	 */
	public String shortDriverAccModify(String driverNum, String accountNo, String accBank, String cardNo, String mobileNo) throws BusinessException;
	
	/**
	 * 发送验证码给司机
	 * @param phone 接受验证码的手机号
	 * @param length 验证码长度
	 * @return 验证码
	 * @throws BusinessException
	 */
	public String sendSmsToDriver(String phone, int length) throws BusinessException;
	
	/**
	 * 查询所有未删除的司机的id和真实姓名，用于增加或者编辑时选择
	 * @return
	 * @throws BusinessException
	 */
	public List<DriverDto> findDriverIdAndRealName() throws BusinessException;
	
	/**
	 * 通过id更新司机真实姓名，测试使用
	 * @param realName
	 * @param id
	 * @throws BusinessException
	 */
	public void editRealNameById(String realName, Long id) throws BusinessException;
	
	/**
	 * 查询未删除的所有司机和其对应公司的名字和id(用于预订单中分配司机)
	 * @return
	 */
	public List<DriverDto> findDriverAndComInfo();
}
